home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Application Source ƒ / C Source ƒ / IC Button What.c next >
Encoding:
C/C++ Source or Header  |  1995-12-01  |  4.5 KB  |  218 lines  |  [TEXT/SPM ]

  1. /*
  2.     IC Button What.c
  3.     
  4. */
  5.  
  6. #include <Traps.h>
  7. #include <QuickDraw.h>
  8. #include <LowMem.h>
  9. #include <Icons.h>
  10.  
  11. #include "IC Window Globals.h"
  12. #include "IC StrH.h"
  13. #include "OS Subs.h"
  14. #include "IC Keys.h"
  15. #include "IC API.h"
  16. #include "IC Subs.h"
  17. #include "IC Dialogs.h"
  18. #include "IC Misc Subs.h"
  19. #include "IC Subs.h"
  20. #include "IC Document.h"
  21. #include "IC Globals.h"
  22. #include "IC Windows.h"
  23.  
  24. #include "IC Button What.h"
  25.  
  26. Boolean button_highlighted;
  27.  
  28. void GetIconRect(DialogPtr dlg,short item,Rect* r){
  29.     short width;
  30.     
  31.     GetDItemRect(dlg,item,r);
  32.     width=r->right-r->left;
  33.     r->right=r->left+32;
  34.     r->bottom=r->top+32;
  35.     OffsetRect(r,(width-32)/2,8);
  36. }
  37.  
  38. pascal void ButtonDeviceLoopProc(short depth,short deviceFlags,GDHandle targetDevice,long item){
  39.     DialogPtr dlg;
  40.     Rect r,boundary_rect,icon_rect;
  41.     short width;
  42.     RGBColor colour;
  43.     FontInfo font_info;
  44.     Str255 str;
  45.     
  46.     GetPort(&dlg);
  47.     PenNormal();
  48.     GetDItemRect(dlg,item,&r);
  49.     if (button_highlighted){
  50.         if (depth==1)
  51.             PaintRect(&r);
  52.         else {
  53.             colour.red=colour.green=colour.blue=16000;
  54.             RGBBackColor(&colour);
  55.             EraseRect(&r);
  56.             BackColor(whiteColor);
  57.         }
  58.     } else {
  59.         if (depth==1)
  60.             EraseRect(&r);
  61.         else {
  62.             colour.red=colour.green=colour.blue=57015;
  63.             RGBBackColor(&colour);
  64.             EraseRect(&r);
  65.             BackColor(whiteColor);
  66.         }
  67.     }
  68.     
  69.     FrameRect(&r);
  70.     GetIconRect(dlg,item,&icon_rect);
  71.     boundary_rect=icon_rect;
  72.     InsetRect(&boundary_rect,-4,-4);
  73.     EraseRect(&boundary_rect);
  74.     FrameRect(&boundary_rect);
  75.     DrawIcon(200+item,&icon_rect,button_highlighted);
  76.     TextFont(applFont);
  77.     TextSize(9);
  78.     GetFontInfo(&font_info);
  79.     GetAString(str,130,item);
  80.     width=StringWidth(str);
  81.     MoveTo((r.left+(r.right-r.left)/2)-(width/2),r.bottom-2-font_info.descent);
  82.     if (button_highlighted)
  83.         TextMode(srcBic);
  84.     
  85.     DrawString(str);
  86.     TextMode(srcOr);
  87. }
  88.  
  89. void DrawButton(DialogPtr dlg,short item,Boolean highlighted){
  90.     Rect r;
  91.     RgnHandle rgn;
  92.     DeviceLoopDrawingUPP dldupp;
  93.     
  94.     button_highlighted=highlighted;
  95.     SetPort(dlg);
  96.     
  97.     if (OurTrapAvailable(_DeviceLoop)){
  98.         GetDItemRect(dlg,item,&r);
  99.         rgn=NewRgn();
  100.         RectRgn(rgn,&r);
  101.         DeviceLoop(rgn,gButtonDeviceLoopProc,item,0);
  102.         DisposeRgn(rgn);
  103.     } else {
  104.         ButtonDeviceLoopProc(1,0,(GDHandle)0,item);
  105.     }
  106. }
  107.  
  108. pascal void ButtonUserItemUpdate(DialogPtr dlg,short item){
  109.     DrawButton(dlg,item,false);
  110. }
  111.  
  112. OSErr WhatOpenButton(WindowType wt,short item){
  113.     SetDItemHandle(WindowInfo[wt].window,item,(Handle)gButtonUserItemUpdate);
  114.     return noErr;
  115. }
  116.  
  117. void ToggleHighlight(DialogPtr dlg,short item,Boolean* highlighted){
  118.     *highlighted=!(*highlighted);
  119.     DrawButton(dlg,item,*highlighted);
  120. }
  121.  
  122. OSErr WhatClickButton(WindowType wt,short item,EventRecord* er){
  123.     DialogPtr dlg;
  124.     Boolean highlighted;
  125.     Point mouse_pos;
  126.     Rect r;
  127.     OSErr err=noErr;
  128.     
  129.     dlg=WindowInfo[wt].window;
  130.     GetDItemRect(dlg,item,&r);
  131.     highlighted=false;
  132.     
  133.     do {
  134.         GetMouse(&mouse_pos);
  135.         if (PtInRect(mouse_pos,&r)!=highlighted)
  136.             ToggleHighlight(dlg,item,&highlighted);
  137.     } while (StillDown());
  138.     
  139.     if (highlighted){
  140.         ToggleHighlight(dlg,item,&highlighted);
  141.         err=WindowsOpen((WindowType)WT_Personal+item-1);
  142.     }
  143.     
  144.     return err;
  145. }
  146.  
  147. #if 0
  148.  
  149. void ToggleHighlight2(Boolean* highlighted,short* transfer,Rect* icon_rect,Handle suite,RgnHandle highlight_rgn){
  150.     unsigned char hl;
  151.     
  152.     *highlighted=!(*highlighted);
  153.     if (System7){
  154.         if (*highlighted)
  155.             *transfer=ttSelected;
  156.         else
  157.             *transfer=ttNone;
  158.         
  159.         PlotIconSuite(icon_rect,atNone,*transfer,suite);
  160.     }
  161.     if (Has_ColorQD){
  162.         hl=LMGetHiliteMode();
  163.         hl=(hl&(~(1<<pHiliteBit)));
  164.         LMSetHiliteMode(hl);
  165.     }
  166.     InvertRgn(highlight_rgn);
  167. }
  168.  
  169. OSErr WhatClickButton(WindowType wt,short item,EventRecord* er){
  170.     DialogPtr dlg=WindowInfo[wt].window;
  171.     Rect r,icon_rect;
  172.     Boolean highlighted;
  173.     Handle suite;
  174.     short transfer;
  175.     RgnHandle highlight_rgn,tmp_rgn;
  176.     Point mouse_pos;
  177.     OSErr err;
  178.     
  179.     GetIconRect(dlg,item,&icon_rect);
  180.     GetDItemRect(dlg,item,&r);
  181.     suite=(Handle)0;
  182.     highlight_rgn=NewRgn();
  183.     InsetRect(&r,1,1);
  184.     RectRgn(highlight_rgn,&r);
  185.     if (System7){
  186.         GetIconSuite(&suite,200+item,svAllLargeData);
  187.         tmp_rgn=NewRgn();
  188.         IconSuiteToRgn(tmp_rgn,&icon_rect,atNone,suite);
  189.         XorRgn(tmp_rgn,highlight_rgn,highlight_rgn);
  190.         DisposeRgn(tmp_rgn);
  191.     }
  192.     
  193.     highlighted=false;
  194.     
  195.     while (StillDown()){
  196.         GetMouse(&mouse_pos);
  197.         if (PtInRect(mouse_pos,&r)!=highlighted)
  198.             ToggleHighlight2(&highlighted,&transfer,&icon_rect,suite,highlight_rgn);
  199.     }
  200.     
  201.     err=noErr;
  202.     if (highlighted){
  203.         ToggleHighlight2(&highlighted,&transfer,&icon_rect,suite,highlight_rgn);
  204.         err=WindowsOpen((WindowType)WT_Personal+item-1,200+item);
  205.     }
  206.     
  207.     if (suite!=(Handle)0)
  208.         DisposeIconSuite(suite,false);
  209.     
  210.     if (highlight_rgn!=(RgnHandle)0)
  211.         DisposeRgn(highlight_rgn);
  212.     
  213.     return err;
  214. }
  215.  
  216. #endif
  217.  
  218.